// vector迭代器
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void myPrint(int val)
{
    cout << val << " ";
}
void test1()
{
    vector<int> v1;
    v1.push_back(4);
    v1.push_back(15);
    v1.push_back(19);
    // 迭代器（支持随机访问）
    vector<int>::iterator vbegin = v1.begin();
    for (vector<int>::iterator it = v1.begin(); it != v1.end(); ++it)
    {
        cout << *it << endl;
    }
    // algorithm头文件中包括
    for_each(v1.begin(), v1.end(), myPrint);
    cout << endl;
    cout << v1.back() << endl;
    cout << *v1.rbegin() << endl;   // 指向最后一个元素
    cout << v1.front() << endl;
    cout << *(v1.rend()-1) << endl; // 指向第一个前面的元素



    // 构造函数
    vector<int> v2(v1.begin(), v1.end()); // 左闭右开
    vector<string> v3(10, "lxy");
    vector<string> v4;
    v4.assign(v3.begin(), v3.end());
    vector<int> v5;
    v5.assign(10, 100);  // 类似于构造的赋值
    // v.size()大小 v.capacity()容量 v.empty()判断是否空
    // v.resize(新长度)  v.resize(新长度，补齐元素) v.clear()清空

    // 下两个需传入迭代器
    // insert 某个位置的迭代器 插入n个elem
    // erase 某个元素迭代器或区间迭代器

    // at访问某个下标 或 []
    // v1.swap(v2) // v1和v2交换
    // 压缩空间 vector<int>(v).swap(v)
    // v.reserve(n) 预留n个空间（可以减少内存开辟次数）

}
int main(void)
{
    test1();

    return 0;
}